home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / misc / amigem.lha / amigem / dos / readargs.c < prev   
Encoding:
C/C++ Source or Header  |  1994-12-10  |  1.9 KB  |  106 lines

  1. LONG FindArg(STRPTR template,STRPTR keyword)
  2. {
  3.   LONG ret=0;
  4.   while(*template)
  5.   {
  6.     char *key=keyword;
  7.     for(;;)
  8.     {
  9.       if(*template=='/')
  10.       {
  11.         if(!*key)
  12.           return ret;
  13.         while(*template&&*template!=',')
  14.           template++;
  15.         break;
  16.       }else if(*template=='=')
  17.       {
  18.         if(!*key)
  19.           return ret;
  20.         break;
  21.       }else if(ToUpper(*key)!=ToUpper(*template))
  22.       {
  23.         while(*template&&*template!='='&&*template!=',')
  24.           template++;
  25.         break;
  26.       }
  27.       key++;
  28.       template++;
  29.     }
  30.     if(*template&&*template++==',')
  31.       ret++;
  32.   }
  33.   return -1;
  34. }
  35.  
  36. #define GET(input) \
  37. (input==0l?FGetC(Input()):input->CurChr>=input->Length?EOF:input->Buffer[input->CurChr++])
  38. #define UNGET(input) (input==0l?UnGetC(Input(),-1):input->CurChr--)
  39.  
  40. LONG ReadItem(STRPTR buffer,LONG maxchars,struct CSource *input)
  41. {
  42.   int c;
  43.   LONG ret;
  44.   do
  45.   {
  46.     c=GET(input);
  47.   }while(c==' '||c=='\t');
  48.   if(c=='\"')
  49.   {
  50.     ret=ITEM_QUOTED;
  51.     c=GET(input);
  52.     while(c!='\"')
  53.     {
  54.       if(maxchars<2||c=='\n'||c==EOF)
  55.       {
  56.         ret=ITEM_ERROR;
  57.         break;
  58.       }
  59.       maxchars--;
  60.       if(c=='*')
  61.       {
  62.         c=GET(input);
  63.         if(c=='e'||c=='E')
  64.           c=0x1b;
  65.         else if(c=='n'||c=='N')
  66.           c='\n';
  67.         else if(c=='\n'||c==EOF)
  68.         {
  69.           ret=ITEM_ERROR;
  70.           break;
  71.     }
  72.       }
  73.       *buffer++=c;
  74.       c=GET(input);
  75.     }
  76.   }else if(c=='=')
  77.     ret=ITEM_EQUAL;
  78.   else
  79.   {
  80.     ret=ITEM_UNQUOTED;
  81.     if(c==';'||c=='\n'||c==EOF)
  82.       ret=ITEM_NOTHING;
  83.     else
  84.       do
  85.       {
  86.         if(maxchars<2)
  87.         {
  88.           ret=ITEM_ERROR;
  89.           break;
  90.         }
  91.         maxchars--;
  92.         *buffer++=c;
  93.         c=GET(input);
  94.       }while(c!=' '&&c!='\t'&&c!='='&&c!=';'&&c!='\n'&&c!=EOF);
  95.   }
  96.   if(!maxchars)
  97.     ret=ITEM_ERROR;
  98.   else
  99.     *buffer++='\0';
  100.   if(c!=EOF)
  101.     UNGET(input);
  102.   else if(IoErr())
  103.     ret=ITEM_ERROR;
  104.   return ret;
  105. }
  106.